﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using digitwhu.Models.IRepositorys;

namespace digitwhu.Models.Repositorys
{
    //字符串分析类，如果含有@的内容，会自动插入到相应的@表中
    public class StringAnalyze : IStringAnaylize
    {
        public StringAnalyze()
        {
        }
        public int AddMicroBlogAt(int blogId, string content)//原创微博内容分析
        {
            //说明：@消息是：@+用户名+空格  表明一条@消息
            //blogId：待分析原创微博的编号
            //content：原创微博待分析的内容
            //返回值：-1表示字符串分析异常，正数表示@消息成功的条数（只有用户名在数据库中存在的@消息才会成功）
            List<int> list_userid = this.Anaylize(content);
            DigitwhuDataContext dc = new DigitwhuDataContext();
            Repository<AtOriginalBlog> r = new Repository<AtOriginalBlog>(dc);
            int count = 0;
            foreach (int id in list_userid)
            {
                string sql="INSERT INTO AtOriginalBlog(originalBlogId,userId) VALUES("+blogId+
                    ","+id+")";
                int temp=dc.ExecuteCommand (sql);//返回更新的行数
                if(temp!=1)
                {
                    return -1;       //更新发生了异常
                }
                count++;
            }
            return count;
        }
        public int AddTranBlogAt(int blogId, string content)//转发微博内容分析
        {
            //说明：@消息是：@+用户名+空格  表明一条@消息
            //blogId：待分析转发微博的编号
            //content：转发微博待分析的内容
            //返回值：-1表示字符串分析异常，正数表示@消息成功的条数（只有用户名在数据库中存在的@消息才会成功）
            List<int> list_userid = this.Anaylize(content);
            DigitwhuDataContext dc = new DigitwhuDataContext();
            Repository<AtTranBlog> r = new Repository<AtTranBlog>(dc);
            int count = 0;
            foreach (int id in list_userid)
            {
                string sql = "INSERT INTO AtTranBlog(tranMicroBlogId,userId) VALUES(" + blogId +
                       "," + id + ")";
                int temp = dc.ExecuteCommand(sql);//返回更新的行数
                if (temp != 1)
                {
                    return -1;       //更新发生了异常
                }
                count++;
            }
            return count;
        }
        public int AddCommentMicroBlogAt(int commentId, string content)//原创微博评论内容分析
        {
            //说明：@消息是：@+用户名+空格  表明一条@消息
            //commentId：待分析原创微博评论的编号
            //content：原创微博评论待分析的内容
            //返回值：-1表示字符串分析异常，正数表示@消息成功的条数（只有用户名在数据库中存在的@消息才会成功）
            List<int> list_userid = this.Anaylize(content);
            DigitwhuDataContext dc = new DigitwhuDataContext();
            Repository<AtOriginBlogComment> r = new Repository<AtOriginBlogComment>(dc);
            int count = 0;
            foreach (int id in list_userid)
            {
                string sql = "INSERT INTO AtOriginBlogComment(commentId,userId) VALUES(" + commentId +
                    "," + id+")";
                int temp = dc.ExecuteCommand(sql);//返回更新的行数
                if (temp != 1)
                {
                    return -1;       //更新发生了异常
                }
                count++;
            }
            return count;
        }
        public int AddCommentTranBlogAt(int commentId, string content)//转发微博评论内容分析
        {
            //说明：@消息是：@+用户名+空格  表明一条@消息
            //commentId：待分析转发微博评论的编号
            //content：转发微博评论待分析的内容
            //返回值：-1表示字符串分析异常，正数表示@消息成功的条数（只有用户名在数据库中存在的@消息才会成功）
            List<int> list_userid = this.Anaylize(content);
            DigitwhuDataContext dc = new DigitwhuDataContext();
            Repository<AtTranBlogComment> r = new Repository<AtTranBlogComment>(dc);
            int count = 0;
            foreach (int id in list_userid)
            {
                string sql = "INSERT INTO AtTranBlogComment(commentId,userId) VALUES(" + commentId +
                    "," + id + ")";
                int temp = dc.ExecuteCommand(sql);//返回更新的行数
                if (temp != 1)
                {
                    return -1;       //更新发生了异常
                }
                count++;
            }
            return count;
        }
        private List<int> Anaylize(string content)
        {
            //分析content内容，根据用户名得到一系列用户编号
            List<int> l = new List<int>();
            string[] sp1 = content.Split('@');
            for (int i = 1; i < sp1.Count(); i++)
            {
                if (sp1[i].Count() > 1)
                {
                    string[] sp2 = sp1[i].Split(' ');
                    string f = sp2.First();
                    if (f.Count() >= 1)
                    {
                        DigitwhuDataContext dc = new DigitwhuDataContext();
                        Repository<User> ru = new Repository<User>(dc);
                        Func<User, bool> exp = u => u.nickName == f;
                        List<User> userlist = ru.FindAll(exp).ToList();
                        foreach (User user in userlist)
                            l.Add(user.id);
                    }
                }
            }
            return l;
        }
    }
}